﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Manager.Camada.Logica;
using Manager.Camada.Negocio;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace Manager.Camada.BancoDados
{
    public class EmpresaDAOImpl : EmpresaDAO
    {
        string strConnection = ConfigurationManager.ConnectionStrings["ConexaoBanco"].ConnectionString.ToString();

        public int inserirEmpresa(EmpresaVO empresa)
        {
            string insertedID = null;

             using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {
                sqlconnection.Open();

                SqlTransaction transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlBusca = "INSERT INTO EMPRESA " + 
                                      "(NOME,NOME_FANTASIA,ENDERECO,NUMERO,COMPLEMENTO,BAIRRO,CIDADE,UF,CEP,TELEFONE) " + 
                                      "VALUES " + 
                                      "(@Nome, @Nome_fantasia,@Endereco,@Numero,@Complemento,@Bairro,@Cidade,@Uf,@Cep,@Telefone);SELECT SCOPE_IDENTITY()";// SET @id = SCOPE_IDENTITY()

                    SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection,transaction);

                    cmd.Parameters.Add(new SqlParameter("@Nome", empresa.nome));
                    cmd.Parameters.Add(new SqlParameter("@Nome_fantasia", empresa.nome_fantasia));
                    cmd.Parameters.Add(new SqlParameter("@Endereco", empresa.endereco));
                    cmd.Parameters.Add(new SqlParameter("@Numero", empresa.numero));
                    cmd.Parameters.Add(new SqlParameter("@Complemento", empresa.complemento));
                    cmd.Parameters.Add(new SqlParameter("@Bairro", empresa.bairro));
                    cmd.Parameters.Add(new SqlParameter("@Cidade", empresa.cidade));
                    cmd.Parameters.Add(new SqlParameter("@Uf", empresa.uf));
                    cmd.Parameters.Add(new SqlParameter("@Cep", empresa.cep));
                    cmd.Parameters.Add(new SqlParameter("@Telefone", empresa.telefone));

                    insertedID = cmd.ExecuteScalar().ToString();

                    transaction.Commit();
                    sqlconnection.Close();

                }
                catch
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }

                return Convert.ToInt32(insertedID);
             }
        }


        public EmpresaVO buscaEmpresaPorId(long idEmpresa)
        {
            EmpresaVO empresa = new EmpresaVO();

            using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {
                sqlconnection.Open();

                SqlTransaction transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlBusca = "SELECT * FROM EMPRESA WHERE IDEMPRESA = @idEmpresa";

                    SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection, transaction);

                    cmd.Parameters.AddWithValue("@idEmpresa", idEmpresa);

                    SqlDataReader dr = cmd.ExecuteReader();

                    DataTable tblEmpresa = new DataTable();
                    tblEmpresa.Load(dr);

                    if (tblEmpresa.Rows.Count > 0)
                    {
                        foreach (DataRow row in tblEmpresa.Rows)
                        {
                            empresa = mountEmpresa(row);
                        }
                    }

                    transaction.Commit();
                    sqlconnection.Close();

                }
                catch
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }

                return empresa;
            }
        }

        public List<EmpresaVO> buscaEmpresa()
        {
            List<EmpresaVO> listaEmpresa = new List<EmpresaVO>();

            using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {
                sqlconnection.Open();

                SqlTransaction transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlBusca = "SELECT * FROM EMPRESA";

                    SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection, transaction);

                    SqlDataReader dr = cmd.ExecuteReader();

                    DataTable tblEmpresa = new DataTable();
                    tblEmpresa.Load(dr);

                    if (tblEmpresa.Rows.Count > 0)
                    {
                        listaEmpresa = mountListaEmpresa(tblEmpresa);
                    }

                    transaction.Commit();
                    sqlconnection.Close();

                }
                catch
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }

                return listaEmpresa;
            }

        }

        private EmpresaVO mountEmpresa(DataRow row)
        {
            EmpresaVO empresa = new EmpresaVO();
            empresa.idEmpresa = Convert.ToInt32(row["IDEMPRESA"]);
            empresa.nome = Convert.ToString(row["NOME"]);
            empresa.nome_fantasia = Convert.ToString(row["NOME_FANTASIA"]);
            empresa.endereco = Convert.ToString(row["ENDERECO"]);
            empresa.numero = Convert.ToInt32(row["NUMERO"]);
            empresa.complemento = Convert.ToString(row["COMPLEMENTO"]);
            empresa.bairro = Convert.ToString(row["BAIRRO"]);
            empresa.cidade = Convert.ToString(row["CIDADE"]);
            empresa.uf = Convert.ToString(row["UF"]);
            empresa.cep = Convert.ToInt32(row["CEP"]);
            empresa.telefone = Convert.ToInt32(row["TELEFONE"]);

            return empresa;
        }

        private List<EmpresaVO> mountListaEmpresa(DataTable tblEmpresa)
        {
            List<EmpresaVO> listaEmpresa = new List<EmpresaVO>();

            foreach (DataRow row in tblEmpresa.Rows)
            {
                EmpresaVO empresa = new EmpresaVO();
                empresa.idEmpresa = Convert.ToInt32(row["IDEMPRESA"]);
                empresa.nome = Convert.ToString(row["NOME"]);
                empresa.nome_fantasia = Convert.ToString(row["NOME_FANTASIA"]);
                empresa.endereco = Convert.ToString(row["ENDERECO"]);
                empresa.numero = Convert.ToInt32(row["NUMERO"]);
                empresa.complemento = Convert.ToString(row["COMPLEMENTO"]);
                empresa.bairro = Convert.ToString(row["BAIRRO"]);
                empresa.cidade = Convert.ToString(row["CIDADE"]);
                empresa.uf = Convert.ToString(row["UF"]);
                empresa.cep = Convert.ToInt32(row["CEP"]);
                empresa.telefone = Convert.ToInt32(row["TELEFONE"]);

                listaEmpresa.Add(empresa);
            }

            return listaEmpresa;
        }
    }
}
